<?php

namespace app\serversms\traits;

trait BaseCheckApp
{
	/**
	 * @author:      李颖
	 * @DateTime:    2017-07-25 18:46:56
	 * @Description: 添加或修改一条记录（该记录分应用进行操作,不是分类记录 若是分类记录，请使用servergoods下的traits下的BaseCheckCate）
	 * 前提：表结构: id app_id other_app_read is_public status 字段必须有 action（标识符）可有可没有 这里没有pid
	 */
	private function _baseCheckApp(array $data, string $addScene = '', string $editScene = '', string $validatePath, string $logicPath, string $getDbOneInfoMethod = 'dbOneInfo', string $checkActionMethod = 'checkAction'): array 
	{

		$logic = new $logicPath;
		$manageAppId = \app\manage\service\ApiBase::getAppId();  //总后台app_id
		$validate = validate($validatePath);
		$returnRes = [];
        
        //修改分类时
        if(isset($data['id']) && $data['id']){
        	if(!$validate->scene($editScene)->check($data)){ return verify_err(null, $validate->getError()); }
        	$oneInfo = $logic->$getDbOneInfoMethod($data);
        	if(!$oneInfo){ return verify_err(null, '该记录不存在'); }
        	if($data['app_id'] != $manageAppId && $data['app_id'] != $oneInfo['app_id']){ return verify_err(null, '无权操作其他应用下的记录'); }
	        if(isset($data['action']) && $data['action'] != $oneInfo['action']){
	            $checkAction = $logic->$checkActionMethod($data);
	            if($checkAction['status'] != SUCCESS_STATUS){ return verify_err(null, '该识别码action已存在'); }
	        }
	        if($manageAppId != $data['app_id'] && isset($data['is_public']) && $data['is_public'] == 1){ return verify_err(null, '公共记录的所属应用必须为亚数后台'); }
	        $returnRes = $oneInfo;
        }
        //添加分类时
        if(!isset($data['id'])){
        	if(!$validate->scene($addScene)->check($data)){ return verify_err(null, $validate->getError()); }
	        if($manageAppId != $data['app_id'] && $data['is_public'] == 1){ return verify_err(null, '只有亚数后台才可以添加公共应用的记录'); }
	    	if(isset($data['action'])){
    			$checkAction = $logic->$checkActionMethod($data);
		        if($checkAction['status'] != SUCCESS_STATUS){ return verify_err(null, '该识别码action已存在'); }
    		}
        }
        return auto_success($returnRes, '添加或编辑该应用下的记录时，验证数据通过');

	}


}